package com.heima.controller;


import com.heima.common.BaseContext;
import com.heima.common.PageResult;
import com.heima.exception.GlobalException;
import com.heima.pojo.Business;
import com.heima.pojo.Role;
import com.heima.pojo.dto.NodeDto;
import com.heima.pojo.dto.PageNodeDto;
import com.heima.pojo.vo.NodeInfoVo;
import com.heima.pojo.vo.NodeVo;
import com.heima.service.NodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@Slf4j
@RequestMapping("/api/vm-service")
public class NodeController {

    @Autowired
    private NodeService nodeService;

    /**
     * 分页查询
     * @param pageNodeDto
     * @return
     */
    @GetMapping("/node/search")
    public PageResult<NodeVo> searchRegionInfo(PageNodeDto pageNodeDto) {
        log.info("接收到参数: {}", pageNodeDto);
        log.info("regionId = {}", pageNodeDto.getRegionId());
        PageResult<NodeVo> pageResult = nodeService.searchRegionInfo(pageNodeDto);
        return pageResult;
    }

    /**
     * 查询商圈详情
     * @return
     */
    @GetMapping("/businessType")
    public List<Business> searchBusinessType() {
        return nodeService.searchBusinessType();
    }

    /**
     * 新增点位
     * @param nodeDto
     * @return
     */
    @PostMapping("/node")
    public Boolean addNode(@RequestBody NodeDto nodeDto) {
        return nodeService.saveNode(nodeDto);
    }

    /**
     * 查询点位下的所有设备
     * @param nodeId
     * @return
     */
    @GetMapping("/node/vmList/{nodeId}")
    public List<NodeInfoVo> getVmList(@PathVariable String nodeId) {
        return nodeService.getVmList(nodeId);
    }

    /**
     * 修改点位信息
     * @param nodeId
     * @param nodeDto
     * @return
     */
    @PutMapping("/node/{nodeId}")
    public Boolean updateNode(@PathVariable String nodeId, @RequestBody NodeDto nodeDto) {
        return nodeService.updateNode(nodeId, nodeDto);
    }

    /**
     * 删除点位
     */
    @DeleteMapping("/node/{nodeId}")
    public Boolean deleteNode(@PathVariable String nodeId) {
        return nodeService.deleteNode(nodeId);
    }

    /**
     * 查询点位数量
     */
    @GetMapping("/node/count")
    public Integer queryNodeCount() {
        Integer currentUserId = Math.toIntExact(BaseContext.getCurrentId());
        if (currentUserId == null) {
            throw new RuntimeException("用户ID不能为空");
        }
        return nodeService.queryNodeCount(currentUserId);
    }
}
